<?php

namespace App\Http\Controllers\Admin;

use App\Models\Admin\DepositOut;
use App\Models\Admin\RuzhuMerchantBasic;
use App\Models\Admin\Withdraw;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Config;
use Illuminate\Http\Request;
use App\Models\Admin\Product;
use App\Models\Admin\Ucenter;
use App\Models\Admin\Dividend;
use App\Models\Admin\Order;
use App\Models\Admin\Sms;

class DividendController extends CommonController {

	/**
	 * 绑定商品和用户关系
	 **/
	public function bind_relation(Request $request) {
		if($request->isMethod('post')) {
			//获取请求参数
			$product_id  = $request->input('product_id');
			$node_id     = $request->input('node_id');

			//数据校验
			if(!$product_id || !$node_id) {
				echo 2; exit;
			}

			//获取产品库存（总量）
			$product = new Product();
			$stock   = $product->get_stock_by_id($product_id);

			//保存数据（绑定关系）
			$data['id']         = Dividend::getNextSeq();
			$data['product_id'] = $product_id;
			$data['node_id']    = $node_id;
			$data['total_part'] = $stock;
			$dividend           = new Dividend();
			$result             = $dividend->save_data($data);
			if($result) { //添加成功
				echo 1; exit;
			}else { //添加失败
				echo 0; exit;
			}
		}
		return view('admin.dividend.bind_relation');
	}

	/**
	 * 分红
	 **/
	public function dividend(Request $request) {
		if($request->isMethod('post')) {
			//获取请求参数
			$product_id  = $request->input('product_id');
			$total       = $request->input('total');
			$month       = $request->input('month');
			$verify_code = $request->input('verify_code');
			
			//数据校验
			if(!$product_id || !$total || !$month || !$verify_code) {
				echo 2; exit;
			}

			if($month <= 0 || $month > 12 || !is_numeric($month)) {
				echo 3; exit;
			}

			//校验验证码
			if($verify_code != $request->session()->get('phone_verify_code')) { //验证码不正确
				echo 5; exit;
			}

			//实例化模型
			$dividend = new Dividend();
			$order    = new Order();
			$ucenter  = new Ucenter();

			//判断用户和产品是否已经绑定关系
			$shop_owner_data = $dividend->get_shop_owner_by_product_id($product_id);
			if(!$shop_owner_data) {
				echo 4; exit;
			}else if($shop_owner_data->status == 0) { //如果绑定关系失效
				echo 6; exit;
			}

			//获取购买的用户及用户购买的数量
			$order_detail_data = $order->get_order_detail_by_product_id($product_id);

			//开启事务
			DB::beginTransaction();

			//记录SQL执行的结果
			$result = [];

			/******处理分红*******/
			foreach($order_detail_data as $key => $value) {
				//查询订单信息
				$order_data = $order->get_order_by_id($value->order_id);

				//查询用户信息
				$node_data  = $ucenter->get_user_info_by_id($order_data->node_id);

				//给用户分红（准备数据）
				$data['id']           = Dividend::getNextSeq();
				$data['shop_id']      = $order_data->store_id;
				$data['total_amount'] = $total;
				$data['amount']       = number_format(($total/$shop_owner_data->total_part)*$value->buy_count,2,'.','');
				$data['month']        = $month;
				$data['node_id']      = $node_data->nodeid;
				$data['node_name']    = $node_data->nodename;
				$data['buy_count']    = $value->buy_count;
				//给用户分红（添加分红记录）
				$result[] = $dividend->save_dividend_record($data);
			}

			//修改用户与商品绑定关系为“失效”状态
			$result[] = $dividend->modify_bind_status($shop_owner_data->id,0);

			//判断SQL是否都执行成功
			if(in_array(false, $result)) { //执行失败
				//回滚事务
				DB::rollback();
				echo 0; exit;
			}else { //执行成功
				//提交事务
				DB::commit();
				echo 1;exit;
			}
		}
		return view('admin.dividend.dividend');
	}

	/**
	 * 分红记录
	 **/
	public function dividend_list(Request $request) {
		//实例化模型
		$dividend = new Dividend();

		if($request->isMethod('post')) { //搜索
			//获取请求参数（用户名）
			$node_name = $request->input('node_name','');
			if($node_name) { //按照用户名查询分红信息
				$data = $dividend->get_dividend_by_node_name($node_name);
			}else {
				//查询分红记录
				$data = $dividend->get_dividend_info();
			}
		}else {
			//查询分红记录
			$data = $dividend->get_dividend_info();
		}

		//如果是搜索查询，保存查询条件（用户名）
		$node_name = isset($node_name) ? $node_name : '';

		return view('admin.dividend.dividend_list',['data'=>$data,'node_name'=>$node_name]);
	}

	/**
	 * 获取产品信息（根据产品名称模糊查询）
	 **/
	public function get_product(Request $request) {
		//获取产品名称
		$product_name = $request->input('product_name');
		if(!$product_name) { //如果产品名称为空
			echo 0; exit;
		}

		//查询商品信息
		$product = new Product();
		$data    = $product->get_product_by_product_name($product_name);
		if($data) {
			echo (json_encode($data));exit;
		}else {
			echo 0; exit;
		}
	}

	/**
	 * 获取用户信息（根据用户名模糊查询）
	 **/
	public function get_node(Request $request) {
		//获取用户名
		$nodename = $request->input('nodename');
		if(!$nodename) {
			echo 0;exit;
		}

		//查询用户信息
		$ucenter = new Ucenter();
		$data = $ucenter->get_node_by_nodename($nodename);

		if($data) { //如果数据存在
			echo json_encode($data);exit;
		}else { //如果数据不存在
			echo 0; exit;
		}
	}

	/**
	 * 发送短信验证码
	 **/
	public function send_sms(Request $request) {
		//实例化模型
		$sms = new Sms();

		//生成随机6为验证码
		$str = '1234567890';
		$rand_verify_code = '';
		for($i=0; $i<6; $i++) {
			$rand_verify_code .= $str{mt_rand(0,9)};
			$request->session()->put('phone_verify_code',$rand_verify_code);
		}

		//短信模板参数
		$parameter = array(
			"DateTime"   => date('Y年m月d日 H:i:s'),
			"VerifiCode" => $rand_verify_code,
			"TemplateNo" => 'c015d86f245c841fc447d21d6f2c42d0',
		);

		//获取需要接收验证码的手机号码
		$phone_number = Config::get('app.msg.phone_number');

		//发送短信验证码
		$sms->msg($phone_number,'操作验证',$parameter);
	}

}